Method and system for expansion of recurring calendar events

ABSTRACT

A system and method for expanding recurring calendar events such that the retrieval of recurring calendar appointments is expedited. A recurring appointment is saved as a data structure including a recurrence pattern. When a recurring appointment is saved by a client that has sufficient processing and memory resources to perform the computations necessary to expand recurring appointments (i.e., a thick client), a background thread is notified. The background thread increases its priority to normal when idle processing capacity is available and calls a routine requesting calendar information for a defined time period. The routine causes the expansion of the data structure into the individual instances of the recurring appointment for a defined time period, and the individual instances are saved for later retrieval. A later query from a client without sufficient processing and memory resources to perform the calculations necessary to expand recurring appointments (i.e., a thin client), therefore, does not require that the expansion computations be performed contemporaneously.

TECHNICAL FIELD

This invention relates generally to computerized calendaringapplications and more specifically to expansion of a recurring calendarentry into individual instances of the calendar entry for a defined timeperiod prior to a user query to display the individual instances of thecalendar entry.

BACKGROUND OF THE INVENTION

The use of software programs and computers for messaging, calendaringand collaborating is common today. For example, computer applicationprograms exists that allow a user to send, receive and manage emailmessages, maintain personal or group calendars, schedule meetings withothers, manage contacts, and maintain task lists. One example of such aprogram is OUTLOOK, manufactured by Microsoft Corporation of Redmond,Wash., although many other such programs are also available.

Application programs that allow messaging, calendaring and collaborationmay reside and execute on a single computer as a stand alone program.Additionally, these application programs may act as a client to accessinformation maintained by a much more advanced, server-based messaging,calendaring and collaboration application. One example of such anadvanced program is Exchange 2000 Server, also manufactured by MicrosoftCorporation. Using Exchange 2000 Server, for example, a plurality ofusers in a networked environment may maintain any number of individualor public email folders, calendars, task list, etc.

In a networked environment, a server based messaging, calendaring andcollaboration program (e.g., Exchange 2000 Server) executes on a serverwhich is networked to a plurality of personal computers running clientprograms (e.g., OUTLOOK). The clients can send and receive email,maintain calendars, maintain task lists, schedule meetings, etc. In suchan implementation, the database containing the email(s), calendar(s),task list(s), etc. for each user may be maintained by the server,although the individual clients may have some control over the creationand management of the messages, management of the client mailbox, and soforth. The details of such an implementation are well known to thosewith ordinary skill in the art.

Generally, a program with calendaring capabilities allows two types ofdifferent appointments to be saved, modified or deleted. A first type ofappointment is a single appointment with a single occurrence at aparticular date and time. Such an appointment is comprised of a datastructure that includes information about the appointment such as, butnot necessarily limited to, a subject line, start and end times, date,and a note about the appointment. A second type of appointment is arecurring appointment. For example, a user may want to schedule ameeting on the first Monday of every month during the year. Instead ofmanually entering and saving twelve separate appointments, manycalendaring programs allow a user to enter and save a single recurringappointment. The data structure associated with such an appointmentincludes all the information normally associated with a singleappointment, as well as information about a recurrence pattern. Thecalendaring program, using the recurrence pattern, then computes andfills in the individual instances of the appointment. The manner inwhich the recurrence pattern is entered and used to expand theindividual instances of the recurring appointment is well known to thosewith ordinary skill in the art. OUTLOOK and Exchange 2000 both allow auser to enter recurring appointments.

Messaging Application Program Interface (MAPI) defines a completearchitecture for messaging applications. The architecture specifiesseveral well-defined components known to those with ordinary skill inthe art. The MAPI architecture can be used for e-mail, scheduling,personal information managers, bulletin boards, and online services thatrun on mainframes, personal computers, and hand-held computing devices.On client computers, MAPI allows complete control over the messagingsystem, creation and management of messages, management of the clientmailbox, service providers and so forth. The comprehensive architecturaldesign allows MAPI to serve as the basis for a common informationexchange. OUTLOOK and Exchange, for example, are programs that supportMAPI.

Generally, a computer running a MAPI compliant client program hassufficient processing and memory resources to perform many of the tasksand computations associated with creation and management of the mailbox,calendar folder, messages, appointments, tasks, etc. A client programwith access to sufficient processing and memory resources will herein bereferred to as a thick client. When a client computer running aMAPI-compliant calendar program (e.g., OUTLOOK) accesses a servercomputer that maintains calendar information (e.g., Exchange 2000), theclient computer receives from the server computer all of the datastructures associated with a requested defined time period. If therequested defined time period (e.g., all calendar appointments for themonth of March) includes one or more recurring appointments, the clientcomputer calculates all of the instances of that appointment during thetime period contemporaneous with the request. The individual instancesof the recurring appointment are then displayed on an appropriate userinterface. This process, however, does not involve delay that istypically noticeable to the user because the recurrence expansioncalculations are usually performed by a desktop computer with its ownprocessor and memory, and because none of the data (i.e., the dataassociated with the single appointments and the individual instances ofthe recurring appointments) are actually written to a hard disk.

It is also possible, however, to check email, calendaring and otherinformation maintained by the server (e.g., Exchange 2000) using aclient computer with relatively low processing and memory resources,i.e., a thin client. For example, a user may check email or calendarinformation remotely using a web browser running on a computer, or aportable device such a mobile phone or a handheld personal informationmanager (PIM). In such an implementation, the web browser (which wouldbe the client), or cell phone or PIM would not have access to sufficientprocessing and memory resources to perform (or perform in a reasonabletime) many of the more resource intensive tasks associated with managingmessages, tasks, appointments, etc. (e.g., expanding a recurringappointment into the individual instances of the appointment).

Microsoft Corporation's Outlook Web Access, is a component of Exchange2000 Server that allows users secure access to their email, calendar,group scheduling, and public folder information maintained by anExchange 2000 Server through the internet using a web browser. Anotherexample is a Mobile Information Server (also manufactured by MicrosoftCorporation) which allows access to similar information via a cell phoneor PIM. An example of a suitable web browser is Internet Explorer,version 5.0 or higher, manufactured by Microsoft Corporation. In theseimplementations, the client can display, add, modify or delete calendarinformation maintained by the server from any location using a wired orwireless Local Area Network or Wide Area Network.

The approach outlined above can cause significant delays for users thatuse both thick and thin clients to save, modify, delete or accessappointment information on a server. For example, a user may make manyadditions to and/or modifications of recurring appointments using athick client (e.g., using a desktop computer running OUTLOOK while atwork). The individual instances of the recurring appointments will notbe expanded and saved to disk at the time they were made. If the userthen tries to access and view these recurring appointments using a thinclient (e.g., via the internet using a web browser from home the nextmorning), all of the recurring appointments for the time period desiredto be viewed will have to be expanded by the server at the time of theviewing because the thin client (e.g., the web browser) has limitedprocessing and memory resources of its own. The server must compute theindividual instances of the recurring appointment from the recurrencepattern and save the individual instances to a computer readable medium.These tasks are resource (e.g., processor and/or memory resources) andtime intensive.

The expansion of recurring appointments at the time of the request couldresult in noticeable time delay from the time the request for calendarinformation is submitted by the thin client to the server, to the timethat the information is displayed on the user interface of the thinclient. This situation is made worse during peak hours when many usersmay be trying to access their calendar information from the server (forexample, users trying to check their calendar from home in the morningbefore leaving for work).

In fact, it is possible that in a worse case scenario, the client maytime-out while waiting for the server to expand and save the recurringappointment data structures.

SUMMARY OF THE INVENTION

The present invention is directed to alleviating the delay associatedwith the expansion of recurring appointments when accessing calendarinformation. In one embodiment of the invention, a status messageindicates whether a recurring appointment data structure has beenexpanded into the individual instances of the recurring appointment.When a recurring appointment is created, modified, or deleted using athick client, a thread running on the server places the folderidentification (FID) of the calendar folder in a queue of FIDs forcalendar folders with recurring appointments that require expansion. Aseparate thread running at low priority on the server is then signaled.The priority of the thread is increased and, with respect to eachcalendar folder containing a recurring appointment that requiresexpansion, the thread calls a routine that causes the server to expandthe recurring appointment(s) in the calendar folder, and the individualinstances of the recurring appointment(s) are saved to a computerreadable medium. In one embodiment of the invention, the separate threadcalls the routine causing the expansion when the central processing unitof the server has extra or idle processing capacity. Thus, when a userlater accesses the calendar information on the server, the recurringappointment(s) have already been expanded into individual instances ofthe appointment(s) and saved to a computer readable medium, and onlyneed to be transmitted for display on an appropriate user interface.Accordingly, there is no delay associated with having to expand therecurring appointments and saving the results at the time the calendarinformation is requested by the client.

BRIEF DESCRIPTION OF THE DRAWINGS

While the appended claims set forth the features of the presentinvention with particularity, the invention, together with its objectsand advantages, may be best understood from the following detaileddescription taken in conjunction with the accompanying drawings ofwhich:

FIG. 1 is a block diagram of an exemplary computer system on which thepresent invention may reside.

FIG. 2 is a block diagram of an exemplary system according to theinvention.

FIG. 3 is a schematic representation of a data structure saved in acalendar folder.

FIGS. 4 a and 4 b are schematic representations of a calendar folderprior to and after a Master has been expanded, respectively.

FIGS. 5 a and 5 b are schematic representations of a Status Messagetable prior to and after a Master has been expanded, respectively.

FIG. 6 is a flow chart representing the steps performed in oneembodiment of the invention to expand an exemplary Master.

DETAILED DESCRIPTION OF THE INVENTION

Turning to the drawings, wherein like reference numerals refer to likeelements, the invention is illustrated as being implemented in asuitable computing environment. Although not required, the inventionwill be described in the general context of computer-executableinstructions, such as program modules, being executed by a personalcomputer and/or server. Generally, program modules include routines,programs, objects, components, data structures, etc. that performparticular tasks or implement particular abstract data types. Moreover,those skilled in the art will appreciate that the invention may bepracticed with other computer system configurations, including hand-helddevices, multi-processor systems, microprocessor based or programmableconsumer electronics, network PCs, minicomputers, mainframe computers,and the like. The invention may also be practiced in distributedcomputing environments where tasks are performed by remote processingdevices that are linked through a communications network. In adistributed computing environment, program modules may be located inboth local and remote memory storage devices.

With reference to FIG. 1, an exemplary system for implementing theinvention includes a general purpose computing device in the form of aconventional personal computer 20, including a processing unit 21, asystem memory 22, and a system bus 23 that couples various systemcomponents including the system memory to the processing unit 21. Thesystem bus 23 may be any of several types of bus structures including amemory bus or memory controller, a peripheral bus, and a local bus usingany of a variety of bus architectures. The system memory includes readonly memory (ROM) 24 and random access memory (RAM) 25. A basicinput/output system (BIOS) 26, containing the basic routines that helpto transfer information between elements within the personal computer20, such as during start-up, is stored in ROM 24. The personal computer20 further includes a hard disk drive 27 for reading from and writing toa hard disk 60, a magnetic disk drive 28 for reading from or writing toa removable magnetic disk 29, and an optical disk drive 30 for readingfrom or writing to a removable optical disk 31 such as a CD ROM or otheroptical media.

The hard disk drive 27, magnetic disk drive 28, and optical disk drive30 are connected to the system bus 23 by a hard disk drive interface 32,a magnetic disk drive interface 33, and an optical disk drive interface34, respectively. The drives and their associated computer-readablemedia provide nonvolatile storage of computer readable instructions,data structures, program modules and other data for the personalcomputer 20. Although the exemplary environment described herein employsa hard disk 60, a removable magnetic disk 29, and a removable opticaldisk 31, it will be appreciated by those skilled in the art that othertypes of computer readable media which can store data that is accessibleby a computer, such as magnetic cassettes, flash memory cards, digitalvideo disks, Bernoulli cartridges, random access memories, read onlymemories, and the like may also be used in the exemplary operatingenvironment.

A number of program modules may be stored on the hard disk 60, magneticdisk 29, optical disk 31, ROM 24 or RAM 25, including an operatingsystem 35, one or more applications programs 36, other program modules37, and program data 38. A user may enter commands and information intothe personal computer 20 through input devices such as a keyboard 40 anda pointing device 42. Other input devices (not shown) may include amicrophone, joystick, game pad, satellite dish, scanner, or the like.These and other input devices are often connected to the processing unit21 through a serial port interface 46 that is coupled to the system bus,but may be connected by other interfaces, such as a parallel port, gameport or a universal serial bus (USB). A monitor 47 or other type ofdisplay device is also connected to the system bus 23 via an interface,such as a video adapter 48. In addition to the monitor, personalcomputers typically include other peripheral output devices, not shown,such as speakers and printers.

The personal computer 20 may operate in a networked environment usinglogical connections to one or more remote computers, such as a remotecomputer 49. The remote computer 49 may be another personal computer, aserver, a router, a network PC, a peer device or other common networknode, and typically includes many or all of the elements described aboverelative to the personal computer 20, although only a memory storagedevice 50 has been illustrated in FIG. 1. Additionally, the computer 20may act as a server computer to one or more remote computers 49. Thelogical connections depicted in FIG. 1 include a local area network(LAN) 51 and a wide area network (WAN) 52. Such networking environmentsare commonplace in offices, enterprise-wide computer networks, intranetsand the Internet.

When used in a LAN networking environment, the personal computer 20 isconnected to the local network 51 through a network interface or adapter53. When used in a WAN networking environment, the personal computer 20typically includes a modem 54 or other means for establishingcommunications over the WAN 52. The modem 54, which may be internal orexternal, is connected to the system bus 23 via the serial portinterface 46. In a networked environment, program modules depictedrelative to the personal computer 20, or portions thereof, may be storedin the remote memory storage device. It will be appreciated that thenetwork connections shown are exemplary and other means of establishinga communications link between the computers may be used.

In the description that follows, the invention will be described withreference to acts and symbolic representations of operations that areperformed by one or more computers, unless indicated otherwise. As such,it will be understood that such acts and operations, which are at timesreferred to as being computer-executed, include the manipulation by theprocessing unit of the computer of electrical signals representing datain a structured form. This manipulation transforms the data or maintainsit at locations in the memory system of the computer, which reconfiguresor otherwise alters the operation of the computer in a manner wellunderstood by those skilled in the art. The data structures where datais maintained are physical locations of the memory that have particularproperties defined by the format of the data. However, while theinvention is being described in the foregoing context, it is not meantto be limiting as those of skill in the art will appreciate that variousof the acts and operations described hereinafter may also be implementedin hardware.

Additionally, the term appointment refers to any data structure storedby a calendaring program that includes at least a date, and/or timefield. The phrase “recurring appointment” refers to an appointment thatalso includes a recurrence pattern. Although the specification generallyrefers to saving an appointment, the discussion is equally applicable todeleting and/or modifying data structures. Moreover, although MAPI is astandard set of functions developed by Microsoft Corporation, it is tobe understood that the invention is not limited to the specific standarddeveloped by Microsoft. Instead, the invention is broad enough to applyto any set of application program interfaces with the same set offunctionalities as discussed herein.

FIG. 2 is a block diagram of an exemplary system according to theinvention. As shown in FIG. 2, a server 49 may run a messaging,calendaring and collaboration program 110 (e.g., Exchange 2000 Sever).As this invention is generically applicable to any program that allowsone or more users to maintain at least an electronic calendar, themessaging, calendar and collaboration program 110 running on the server49 will herein be referred to as the calendar program 110. The calendarprogram maintains a main database 112 which includes information aboutthe emails, calendar, tasks, notes, etc. of one or more users. Thedatabase 112 may be maintained on any computer readable medium, forexample, a hard disk. In an Exchange 2000 implementation of the presentinvention, the main database 112 is referred to as the mail database.

The main database 112 includes one or more calendar folders 114. Eachuser may have one or more calendar folders 114. For example, a user mayhave a calendar folder for personal appointments and a calendar folderfor business related appointments. Additionally, groups of users mayshare a calendar folder. Each calendar folder 114 has a folderidentification (FID) 116 for identifying and locating the calendarfolder. The calendar program 110 may also have a routine, hereinreferred to as Callback routine 118, which among other tasks, may placethe FID 116 of a particular calendar folder in a queue 117 of calendarfolders with recurring appointments that have to be expanded. Thecalendar program 110 also may include a separate, distinct thread(herein referred to as the Simulator thread 120) for calling a routinethat causes the calendar program on the server to expand a recurringappointment into the individual instances of the recurring appointment.The Callback routine 118 may run on the same thread (which is differentthan the Simulator thread 120) as the calendar program 110. In analternative embodiment, the Callback routine may run on its own separatethread. Thus, in such an implementation three, rather than two, separatethreads would be running on the server. The Simulator thread 120 isfurther discussed in the proceeding sections.

The information maintained by the calendar program 110 in the one ormore calendar folders 114, may be saved, modified, deleted or viewed bya client program or module 20 a (shown in the figure running on acomputer) with access to sufficient processing and memory resources toperform the computations necessary to expand the recurring appointmentinto the individual instances of the appointment (i.e., a thick client),instead of these computations being performed by the server. An exampleof such a thick client is a client program compatible with the MAPIprotocol (e.g., OUTLOOK) running on a desktop computer. The informationmay also be saved, modified or deleted by a client program or module 20b (shown in the figure running on a computer) without access tosufficient processing and memory resources to perform the computationsnecessary to expand a recurring appointment into the individualinstances of the appointment, wherein these computations have to beperformed by the server (i.e., a thin client). An example of such a thinclient is a web browser running on a computer when the web browsercannot or does not have access to sufficient processing and memoryresources to perform the expansion computations. The web browser may,for example, use the hyper text transfer protocol (with or withoutDistributed Authoring and Versioning (DAV), also known as WebDAV) tocommunicate with the calendar program running on the server.

The clients 20 a and 20 b may communicate with the server 49 through aLAN or WAN, here identified as 51/52. Although FIG. 2 depicts computers20 running client programs, the invention is broad enough to encompassany combination of hardware or software that acts as a client to theserver, such as cell phones, pagers, or PIMS.

In the present invention, a thick client is one in which the client iscapable of performing the calculations associated with expanding arecurring appointment into the individual instances of the appointmentlocally (i.e., on the device on which the client is running), instead ofthese computations being performed by the server. A thin client,however, is incapable of performing (or performing in a reasonable time)these calculations locally and, therefore, the calculations must beperformed by the server and saved to a computer readable medium. For thepurposes of the present invention and discussion, the precedingcapability distinguishes a thick client from a thin client.

In one embodiment of the invention, the calendar program running on theserver may determine whether the client is a thick client or a thinclient based on the protocol that the client uses to communicate withthe server. For example, as a matter of design choice, the calendarprogram may assume that clients using the MAPI protocol to communicatewith the server are thick clients, whereas clients using HTTP (with orwithout DAV) to communicate with the server are thin clients. As anotherexample, the server may poll the client for its capabilities or theclient may provide this information to the server when firstestablishing a communication link. The invention, however, is notlimited to any specific manner for determining the capabilities of theclient. Additionally, although the MAPI protocol and HTTP are mentionedfor illustrative purposes, the invention is broad enough to encompassany protocol used to communicate between the client and server.

FIG. 3 is a schematic representation of a data structure 200representing an appointment saved in calendar folder 114 in the database112 of the calendar program 110. The data structure 200 may includes oneor more of the fields indicated: name of appointment 202, start date204, start time 206, end date 208, end time 210, location of theappointment 212, recurrence pattern of the appointment 214, and instancetype 216. A data structure 200 that includes a recurrence pattern (i.e.,a data structure for a recurring appointment) is herein referred to as aMaster. The instance type field 216 refers to whether the appointment isa single occurrence appointment, a Master, or an individual instance ofa Master that has been expanded. The data structure 200 is not limitedto this particular embodiment and may include and combination of theabove fields or other additional fields.

FIG. 4 a represents a table 230 of individual data structures 200associated with a calendar folder 114, prior to expansion of anyMasters. The columns of table 230 refer to the individual fields 202-216of the data structure 200, and each row 232 a through 232 n represents adistinct data structure entry in the calendar folder. Letter subscriptsare used with element numbers to identify more than one instance of theelement, with the subscript n signifying that the invention does notlimit the quantity of the element. Table 230 is intended as a generalrepresentation of the data in the calendar folder 114 and not as anexact physical or logical representation of how the data is actuallystored or managed. In one embodiment of the invention, when usingOutlook Web Access, each data structure is logically a separate filesuch that each appointment can be retrieved using a Uniform ResourceLocator (URL) of the data structure.

The data shown in table 230 of FIG. 4 a is representative of the datathat may populate the data structures that comprise individualappointments in the calendar folder 114. Additionally, the table maycontain any number and/or combination of single appointments, Masters,or individual instances of recurring appointments (i.e., individualinstances of a Master that has been expanded).

In the representative table shown in FIG. 4 a, Master A in row 232 b hasnot been expanded into the individual instances of the recurringappointment. The table 230 shown in FIG. 4 b is the same as in FIG. 4 a,except that in this table the individual instances of Master A (column232 b) have been expanded and are indicated in rows 232 c-232 e of thetable 230.

When a Master is created, modified or deleted, a Status Messageindicates whether the Master has been expanded or not. As shown in FIGS.5 a and 5 b, in one embodiment the Status Message may be implemented asa table 250. In such an embodiment, a row 252 is created for each Masterin the calendar folder 114. The table may contain one or more columns254, each column representing a defined time period. For example, eachcolumn may represent one month of the year. Each cell of the table mayinclude a value indicative of whether the Master has already beenexpanded for the defined time period. If a Master has already beenexpanded for a particular month, the cell for that month may contain avalue of 1. If the Master has not been expanded for the particularmonth, the cell may contain a value of 0. It is to be understood thatthe invention is not limited to this particular implementation of theStatus Message. Rather, the invention is broad enough to encompass anyimplementation in which the calendaring program is capable of trackingwhether a Master in a particular calendar folder has already beenexpanded into the individual instances of the appointment for a definedtime period.

In one embodiment of the invention, the steps to expand an exemplaryMaster (herein referred to as Master A) are as follows. With respect toFIG. 6, at step 300 a client 20 a saves a recurring appointment on theserver 49. The recurring appointment is saved as Master A in row 232 ain the table 230 in the calendar folder 114 of the main database 112. Itis to be appreciated that the main database 112 may be located on acomputer readable medium logically accessible to the server 49,irrespective of whether the computer readable medium is physicallylocated in the server. Additionally, although the present discussion iswith respect to a save operation (i.e., when a new recurring appointmentis created and saved by a client), the invention is not limited to thisoperation. Indeed, the invention, and the steps of FIG. 6, are broadenough to apply to any operation that requires the instances ofrecurring appointments or their content to change. Such operationsinclude, but are not limited to, operations that save, modify or deleteMasters.

At step 302, the Status Message is set to indicate that Master A has notbeen expanded. In the embodiment of the Status Message shown in FIG. 5a, row 252 a is created for Master A and the values of the cells in therow are set to 0. If at step 300 an already expanded Master wasmodified, at step 302 the appropriate cells in the row associated withthe modified Master are changed to indicate that the Master has not beenexpanded from the time of the modification. As a result, the individualinstances of the modified Master will be recomputed. If at step 300 aclient deleted a recurring appointment, i.e., deleted a Master, theStatus Message of the Master is set to indicate that the instances ofthe Master should be deleted. In the embodiment shown in FIGS. 5 a and 5b, a delete column 256 indicates whether a Master should be deleted.Thus, when a user deletes a Master, the delete column for the Master ischanged to 1 from 0.

At step 304 the calendaring program 110 determines whether the save (ormodify or delete) operation was performed from a thick client or a thinclient. If the save operation was performed from a thin client, nofurther action is taken according to the invention and Master A may beexpanded immediately as a consequence of an immediate query by the thinclient for the instances of the recurring appointment. The specificsteps performed in this eventuality are well known to those withordinary skill in the art. If the save operation was performed by athick client, at step 306 the Callback routine 118 is called.

At step 308, the Callback routine 118 places the FID 116 of the calendarfolder 114 in a queue 117 of calendar folders that contain Masters thatrequire expansion. In one embodiment of the invention, the C⁺⁺ StandardTemplate Library is used to implement the queue and place the FID in thequeue, although any suitable queue implementation may be used. At step308 the Callback routine 118 also signals the Simulator thread 120 thata calendar folder requiring expansion has been placed in the queue 117.

In one embodiment of the invention, the Callback routine may also placethe calendar folder's FID in a set (not shown) of FIDs indicative ofcalendar folders in the expansion queue 117. In such an embodiment,prior to placing the FID in the queue, the Callback routine 118 checksthe set of FIDs to determine whether the calendar folder is already inthe queue. If the FID is already in the queue, the Callback routine doesnot place the FID in the queue again. In an alternate embodiment of theinvention, instead of placing the FID 116 of the calendar folder 114 ina queue, a pointer or identifier (not shown) specifically pointing to oridentifying the Master that requires expansion is placed in the queue117.

The Simulator thread 120 normally runs in a low priority in thehierarchy of threads that are running on the server 49. In oneembodiment of the invention, the Simulator thread 120 is created whenthe calendar program 110 starts executing on the server 49 and isterminated when the calendaring program is shut down.

At step 310 the priority of the Simulator thread is increased. Forexample, the Simulator thread's priority may be changed to normal orhigh, depending on the particular implementation of the invention anddesign choice. In one embodiment of the invention, the priority of theSimulator thread is increased, and the remaining steps performed, whenthe server has idle or extra processing capacity.

At step 312, the Simulator thread 120 calls a routine (not shown) thatcauses the server to expand the Master for a defined time period. Theroutine causes the server to expand the Master(s) that have not alreadybeen expanded and save the individual instances of the expandedMaster(s) in rows 232 of table 230 in calendar folder 114. If the clienthas deleted a Master, the routine called by the Simulator thread deletesall instances of the Master from the table 230 in the calendar folder114, and also deletes the row 252 corresponding to the Master from table250.

In one embodiment, the Simulator thread requests from the routine theleast amount of information necessary to cause the routine to expand theMaster. The invention is broad enough to encompass any defined length oftime. For example, the Simulator thread may request all Masters in thenext 24 hours, the current month, the current calendar year, theproceeding twelve months, etc. In one embodiment, the time period may beall months included in the next 30 days (which in the rightcircumstances could comprise as many as three different months).

FIG. 4 b depicts a representative table 230 in the calendar folder 114after Master A has been expanded for the month of January according tostep 312. The individual instances of Master A for January are saved inrows 232 c-232 e.

At step 314, the Status Message for Master A is changed to indicate thatMaster A has been expanded and saved in the calendar folder 114. Withreference to FIG. 5 b, for example, the Status Message for Master A inJanuary is changed to 1, indicating that all instances for Master A forJanuary have been expanded and saved to disk.

Although not shown as a separate step in FIG. 6, the FID of the calendarfolder is also removed from the queue when the Status Message ischanged. If the set indicative of FIDs in the queue has beenimplemented, the FID of the calendar folder is also removed from theset. If only a pointer or identifier to the Master was placed in thequeue, then this pointer or identifier is removed from the queue.

At decision step 316, the Simulator thread determines if there are anyadditional FIDs 116 in the queue 117 of calendar folders with Mastersthat require expansion. If so, steps 312 and 314 are repeated for theseadditional calendar folders 114. In one implementation, the queue 117 isa first in, first out queue. If no other FIDs 116 are in the queue 117,at step 316 the priority of the Simulator thread is reverted to a lowerpriority. The Simulator thread will remain in a low priority until thenext time the Callback routine 118 signals the Simulator thread 120.

With the present invention, when a thin client queries calendarinformation saved on a server by a thick client, the Masters may havealready been expanded into individual instances of the recurringappointments and saved to a computer readable medium. When receiving thequery, the server checks the Status Message to ensure that all Mastersin the calendar folder have been expanded for a defined time period.Because the Masters have already been expanded, the single appointmentsand individual instances of Masters are transmitted to the client anddisplayed on an appropriate user interface. Accordingly, the delayassociated with expanding the Masters and saving the individualinstances to the calendar folder contemporaneous with the client requestis eliminated.

In view of the many possible embodiments to which the principles of thisinvention may be applied, it should be recognized that the embodimentdescribed herein with respect to the drawing figures is meant to beillustrative only and should not be taken as limiting the scope ofinvention. For example, those of skill in the art will recognize thatthe elements of the illustrated embodiment shown in software may beimplemented in hardware and vice versa or that the illustratedembodiment can be modified in arrangement and detail without departingfrom the spirit of the invention. Therefore, the invention as describedherein contemplates all such embodiments as may come within the scope ofthe following claims and equivalents thereof. As another example, thefunctionalities of the Callback and Simulator threads may be performedby a single thread.

Although the specification discusses an implementation in which a singleserver is used, those with ordinary skill will recognize that the systemand method of the present invention may be implemented using a pluralityof servers. Additionally, the database 112 may be implemented on aseparate file server. Other multiple server implementations are alsointended to be encompassed by the invention.

Additionally, even though the specification refers to certain softwareapplications available commercially, the invention is not limited tothese named applications or the current version of these applications.Rather, these applications are mentioned for illustrative purposes andthe invention is broad enough to encompass any combination of softwareand hardware with the functionalities described herein.

1. A method of expanding a master data structure including a recurrencepattern into individual instances of a recurring appointment accordingto the recurrence pattern for a defined time period, comprising: placingan identifier identifying a calendar folder containing the master datastructure in a queue for further processing; signaling a first threadhaving a priority level, the priority level being a first priority levelthat the calendar folder containing the master data structure is queuedfor further processing; changing the priority level of the first threadfrom the first priority level to a second, higher priority level;calling a first routine for expanding the master data structure into theindividual instances of the recurring appointment; and saving theindividual instances of the recurring appointment to the calendar folderon a computer readable medium.
 2. The method of claim 1, furthercomprising saving the calendar folder containing the master datastructure in the computer readable medium, wherein the calendar foldercontaining the master data structure is saved to the computer readablemedium based on a request from a thick client.
 3. The method of claim 2,wherein the thick client is compliant with the MAPI architecture.
 4. Themethod of claim 1, wherein the first thread performs the step of callingthe first routine.
 5. The method of claim 4, wherein the first threadcalls the first routine by simulating a query from a thin client.
 6. Themethod of claim 5, wherein the thin client is a web browser. 7-8.(canceled)
 9. The method of claim 1, wherein the first priority level ofthe first thread is a low priority level.
 10. The method of claim 1,wherein the second priority level of the first thread is a normalpriority level.
 11. The method of claim 1, wherein the second prioritylevel of the first thread is a high priority level.
 12. The method ofclaim 1, wherein the steps of changing the priority level and callingthe first routine occur when idle processing capacity is available. 13.A system for expanding a recurring data structure including a recurrencepattern indicative of individual instances of a recurring appointmentfor a defined time period, comprising: means for maintaining a databaseincluding a calendar folder containing at least one recurring datastructure; means for determining whether the recurring data structure inthe calendar folder has been expanded into individual instances of therecurring appointment; means for placing the calendar folder in a queue;means for retrieving the calendar folder from the queue; and means forcalling a routine causing the expansion of the recurring data structureinto the individual instances of the recurring appointment for a definedtime period.
 14. The system of claim 13, further comprising means forsaving the individual instances of the recurring appointment in thecalendar folder.
 15. The system of claim 14, wherein the means forretrieving the calendar folder from the queue is a thread that runs inthe background.
 16. The system of claim 15, further comprising means forsignaling the thread that the calendar folder containing the recurringdata structure is in the queue.
 17. A computer-readable medium havingcomputer executable instructions for expanding a master data structureincluding a recurrence pattern into individual instances of a recurringappointment according to the recurrence pattern for a defined timeperiod, which, when executed comprise: placing an identifier identifyinga calendar folder containing the master data structure in a queue forfurther processing; signaling a simulator thread having a prioritylevel, the priority level being a first priority level that the calendarfolder containing the master data structure is queued for furtherprocessing; changing the priority level of the simulator thread to asecond, higher priority level; calling a first routine for expanding themaster data structure into the individual instances of the recurringappointment; and saving the individual instances of the recurringappointment to the calendar folder on a computer readable medium. 18.The computer-readable medium of claim 17, wherein the computerexecutable instructions for expanding the master data structure, whenexecuted, further comprise calling a callback routine to perform thesteps of placing the identifier in the queue and signaling the simulatorthread.
 19. The computer-readable medium of claim 18, wherein thecallback routine executes in a separate thread.
 20. Thecomputer-readable medium of claim 17, wherein the simulator threadperforms the step of calling the first routine.
 21. Thecomputer-readable medium of claim 20, wherein the simulator thread callsthe first routine by simulating a query from a thin client.
 22. Thecomputer-readable medium of claim 17, wherein the first priority levelof the simulator thread is a low priority level.
 23. Thecomputer-readable medium of claim 22, wherein the priority level of thesimulator thread is changed to a second, higher priority level when idleprocessing capacity is available.
 24. The computer-readable medium ofclaim 23, wherein the second priority level of the simulator thread is anormal priority level.
 25. The computer-readable medium of claim 23,wherein the second priority level of the simulator thread is a highpriority level.
 26. A system for expanding a master data structureincluding a recurrence pattern contained in a calendar folder maintainedby a server executing a calendaring application into individualinstances of a recurring appointment, comprising, a database logicallyaccessible to the calendaring application on the server for maintainingthe calendar folder; a status message implemented by the calendaringapplication, the status message indicating whether the calendar foldercontains the master data structure that requires expanding; a firstthread executing at a low priority level on the server; and a firstroutine for computing the individual instances of the recurringappointment from the recurrence pattern of the master and saving theindividual instances in the calendar folder, wherein the first threadcalls the first routine. 27-28. (canceled)
 29. The system of claim 26,wherein the first thread calls the first routine by simulating a queryfrom a thin client.
 30. The system of claim 26, wherein the prioritylevel of the first thread is increased prior to the first thread callingthe first routine. 31-33. (canceled)
 34. A method of expediting thedisplay of recurring calendar information on a thin client, comprising:detecting whether a master data structure including a recurrence patternof a recurring appointment was saved by a thick client; placing thecalendar folder including the master data structure in a queue ofcalendar folders requiring further processing; signaling a simulatorthread running in the background that the calendar folder has beenplaced in the queue; increasing a priority level of the simulatorthread; expanding the master data structure into individual instances ofthe recurring appointment; and saving the individual instances of therecurring appointment to a computer readable medium.
 35. The method ofclaim 34, further comprising changing a status message associated withthe master data structure to indicate that the master data structure hasto be expanded.
 36. The method of claim 35, further comprising changingthe status message associated with the master data structure to indicatethat the master data structure has been expanded.
 37. (canceled)
 38. Amethod of expanding a master data structure including a recurrencepattern into individual instances of a recurring appointment accordingto the recurrence pattern for a defined time period, comprising: placingan identifier identifying the master data structure in a queue forfurther processing; signaling a first thread having a priority level thepriority level being a first priority level that the master datastructure is queued for further processing; changing the priority levelof the first thread from the first priority level to a second, higherpriority level; calling a first routine that expands the master datastructure into the individual instances of the recurring appointment;and saving the individual instances of the recurring appointment to acomputer readable medium.
 39. The method of claim 38, wherein the firstthread calls the first routine that expands the master data structure.40. The method of claim 38, wherein the first thread calls the firstroutine by simulating a query from a thin client for calendarinformation for a defined time period.
 41. The method of claim 40,wherein the thin client is a web browser.
 42. (canceled)
 43. The methodof claim 38, wherein the first priority level of the first thread is alow priority level.
 44. The method of claim 38, wherein the secondpriority level of the first thread is a normal priority level.
 45. Themethod of claim 38, wherein the second priority level of the firstthread is a high priority level.
 46. (canceled)
 39. The method of claim38, wherein the first thread calls the first routine that expands themaster data structure.
 40. The method of claim 38, wherein the firstthread calls the first routine by simulating a query from a thin clientfor calendar information for a defined time period.
 41. The method ofclaim 40, wherein the thin client is a web browser.
 42. The method ofclaim 38, further comprising calling a second routine to perform thestep of placing the identifier in the queue and signaling the firstthread.
 43. The method of claim 38, wherein the first priority level ofthe first thread is a low priority level.
 44. The method of claim 38,wherein the second priority level of the first thread is a normalpriority level.
 45. The method of claim 38, wherein the second prioritylevel of the first thread is a high priority level.
 46. The method ofclaim 38, wherein the steps of changing of the priority level andcalling the first routine occur when idle processing capacity isavailable.